/**
 * 将 Base64 格式的字符串转换成指定格式的图片，并下载到本地
 * @param {string} base64String Base64 格式的字符串
 * @param {string} fileName 保存到本地的文件名，不包括后缀名，默认值为 'image'
 * @param {string} format 图片的格式，例如 'jpeg' 或 'png'，默认值为 'png'
 */
export function downloadBase64AsImage(
	base64String,
	fileName = "image",
	format = "png"
) {
	// 解析图片的格式
	const mimeType = `image/${format}`;

	// 将 Base64 字符串转换为 Blob 对象
	const byteString = atob(base64String.split(",")[1]);
	const arrayBuffer = new ArrayBuffer(byteString.length);
	const uint8Array = new Uint8Array(arrayBuffer);
	for (let i = 0; i < byteString.length; i++) {
		uint8Array[i] = byteString.charCodeAt(i);
	}
	const blob = new Blob([arrayBuffer], { type: mimeType });

	// 创建一个下载链接，下载链接的 href 属性指向 Blob 对象的 URL
	const url = URL.createObjectURL(blob);
	const link = document.createElement("a");
	link.download = `${fileName}.${format}`;
	link.href = url;

	// 将下载链接添加到页面中并触发点击事件进行下载
	document.body.appendChild(link);
	link.click();

	// 移除下载链接，并释放 Blob 对象占用的资源
	document.body.removeChild(link);
	URL.revokeObjectURL(url);
}

/**
 * 将 Base64 格式的字符串转换成指定格式的图片，并下载到本地
 * @param {string} base64String Base64 格式的字符串
 * @param {string} fileName 保存到本地的文件名，不包括后缀名，默认值为 'image'
 * @param {string} format 图片的格式，例如 'jpeg' 或 'png'，默认值为 'png'
 */
export function downloadBase64AsImage2(
	base64String,
	fileName = "image",
	format = "png"
) {
	// 解析图片的格式
	const mimeType = `image/${format}`;

	// 将 Base64 字符串转换为 Blob 对象
	const byteString = atob(base64String.split(",")[1]);
	const arrayBuffer = new ArrayBuffer(byteString.length);
	const uint8Array = new Uint8Array(arrayBuffer);
	for (let i = 0; i < byteString.length; i++) {
		uint8Array[i] = byteString.charCodeAt(i);
	}
	const blob = new Blob([arrayBuffer], { type: mimeType });

	// 创建一个下载链接，下载链接的 href 属性指向 Blob 对象的 URL
	const url = URL.createObjectURL(blob);
	const link = document.createElement("a");
	link.download = `${fileName}.${format}`;
	link.href = url;

	// 将下载链接添加到页面中并触发点击事件进行下载
	document.body.appendChild(link);
	link.click();

	// 移除下载链接，并释放 Blob 对象占用的资源
	document.body.removeChild(link);
	URL.revokeObjectURL(url);
}
